package com.huangliusong.linklist;


/**
 * @author huangliusong
 * @since 2018/10/15
 * {@link }
 */
public class LinkedList<E> {
    private class Node {
        public E e;
        public Node next;
        public Node(E e,Node next){
            this.e=e;
            this.next=next;
        }
        public Node(E e){
            this(e,null);
        }
        public Node(){
            this(null,null);
        }

        @Override
        public String toString() {
            return e.toString();
        }

    }

    private Node dummyHead;
    private int size;


    public LinkedList() {
       dummyHead=new Node(null,null);
       size=0;
    }

    //获取链表中元素的个数
    public int getSize(){
        return size;
    }

    //kong
    public boolean isEmpty(){
        return size==0;
    }

    //add e
    public void addFirst(E e){
//        Node node=new Node(e);
//        node.next=head;
//        head=node;
      add(0,e);
    }


    public void add(int index,E e){
        if(index<0||index>size)
            throw new IllegalArgumentException("");

            Node prev=dummyHead;
            for (int i=0;i<index;i++){
                prev=prev.next;
            }
           prev.next=new Node(e,prev.next);
            size++;

    }

    public void addLast(E e){
        add(size,e);
    }


    public E get(int index){
        if(index<0||index>size)
            throw new IllegalArgumentException("");

        Node cur=dummyHead.next;
        for (int i=0;i<index;i++)
            cur=cur.next;
        return cur.e;
    }
}
